package com.example.scaletest;

import android.content.SharedPreferences;

import com.tencent.mmkv.MMKV;

import java.util.Map;

import cn.hutool.core.util.StrUtil;

public class SpUtil {
    private static SharedPreferences sharedPreferences;

    private static SharedPreferences.Editor editor;
    private static MMKV mmkv;

    private SpUtil() {

    }

    private static void init() {
//        sharedPreferences = Config.app().getSharedPreferences(Config.SP_FILE_NAME, Context.MODE_PRIVATE);
//        editor = sharedPreferences.edit();

        mmkv = Config.mmkv;
    }

    /**
     * 保存数据的方法，拿到数据保存数据的基本类型，然后根据类型调用不同的保存方法
     *
     * @param key
     * @param value
     */
    public static void put(String key, String value) {

        init();
//        editor.putString(key, value);
//        editor.apply();
        mmkv.encode(key,value);

    }

    public static void put(String key, boolean value) {

        init();
        mmkv.encode(key,value);

    }
    public static void put(String key, long value) {

        init();
        mmkv.encode(key,value);

    }

    public static void put(String key, int value) {

        init();
        mmkv.encode(key,value);

    }

    /**
     * 获取保存数据的方法，我们根据默认值的到保存的数据的具体类型，然后调用相对于的方法获取值
     *
     * @param key 键的值
     * @return
     */

    public static String get(String key) {
        init();
        try {
            return StrUtil.isNotEmpty(mmkv.decodeString(key))?mmkv.decodeString(key):"";
        }catch (Exception e){
            e.printStackTrace();
            return "";
        }

//        return sharedPreferences.getString(key, "");
    }


    public static boolean get(String key, boolean defaultStr) {
        init();
//        return sharedPreferences.getString(key, defaultStr);
        return mmkv.decodeBool(key,defaultStr);
    }
    public static int get(String key, int defaultStr) {
        init();
//        return sharedPreferences.getString(key, defaultStr);
        return mmkv.decodeInt(key,defaultStr);
    }
    public static long get(String key, long defaultStr) {
        init();
//        return sharedPreferences.getString(key, defaultStr);
        return mmkv.decodeLong(key,defaultStr);
    }

    public static long getLong(String key) {
        init();
//        return sharedPreferences.getString(key, defaultStr);
        return mmkv.decodeLong(key);
    }

    public static String get(String key, String defaultStr) {
        init();
//        return sharedPreferences.getString(key, defaultStr);
        return StrUtil.isNotEmpty(mmkv.decodeString(key))?mmkv.decodeString(key):defaultStr;
    }

    /**
     * 移除某个key值已经对应的值
     *
     * @param key
     */
    public static void remove(String key) {
        init();
        mmkv.removeValueForKey(key);
//        editor.remove(key);
//        editor.apply();
    }

    /**
     * 清除所有的数据
     */
    public static void clear() {
        init();
        mmkv.clear();
//        editor.clear();
//        editor.apply();
    }

    /**
     * 查询某个key是否存在
     *
     * @param key
     * @return
     */
    public static boolean contains(String key) {
        init();
        return sharedPreferences.contains(key);
    }

    /**
     * 返回所有的键值对
     *
     * @return
     */
    public static Map<String, ?> getAll() {
        init();
        return sharedPreferences.getAll();
    }

}
